package com.dfe.backend.common.sax.spd.substation.region.device;

import lombok.Data;

import java.util.List;

/**
 * 【描述】：表示屏柜内的设备，满足下列规定：
 * a)当设备含多个部件时，Device元素下应包含1个或多个SubDevice元素。
 * b)当Device元素的partName属性不为空时，Device元素由名称与partName属性值相同的PartTemplate元素实例化而来，同时PartTemplate下所有PinTemplate、ComponentTemplate、InPartTemplate、InCoreTemplate子元素均隐式实例化为Pin、Component、InDevice、InCore元素,并可通过显式实例化重新定义元素的部分属性。
 * 注：隐式实例化是指元素在模型中不进行直接声明，但是元素均存在，其所有属性均按照模板所规定的默认属性。显示实例化是指在模型中直接对元素的属性或子元素进行重新定义，一般当元素与模板有属性或子元素不同时会采用显示实例化。
 * c)当Device元素的partName属性为空时，可根据需要定义Device元素及Device元素下所有的Pin、Component、InDevice、InCore元素及其属性。
 *
 * @author LiChang
 * @since 2025-7-29 11:40
 */
@Data
public class Device {
    /**
     * 屏柜中的设备编号。对于IPD文件，设备编号固定为TEMPLATE；对于CPD、SPD文件，设备编号应与设计编号一致且唯一
     */
    private String name;
    /**
     * 设备描述
     */
    private String desc;
    /**
     * 设备铭牌文本
     */
    private String label;
    /**
     * IED设备名称。应与SCD文件中的IED设备名称一致。对于非IED设备，该属性可为空
     */
    private String iedName;
    /**
     * 设备编码，宜遵循NB/T 11198的规定
     */
    private String gridId;
    /**
     * 电网资产统一身份编码
     */
    private String objectId;
    /**
     * 对应的PartTemplate名称
     */
    private String partName;
    /**
     * 设备型号
     */
    private String type;
    /**
     * 设备制造厂商的名称
     */
    private String manufacturer;
    /**
     * 设备类型，注意这里应为class，但冲突，所以定为className
     */
    private String className;

    private List<SubDevice> subDeviceList;

    private List<InDevice> inDeviceList;

    private List<Component> componentList;

    private List<InCore> inCoreList;

    private List<Pin> pinList;

}
